package review.Day_0402;

import java.util.Stack;

/**
 * @author zxc
 * @date 2023/04/02 20:45
 **/
public class Solution04 {
    // 思路 ：辅助栈
    int size;
    int maxSize;
    // 主栈 ：用来存储所有元素
    Stack<Integer> stack;
    // 辅助栈 ：用于指定的增量操作;
    Stack<Integer> temp;

    public Solution04(int maxSize) {
        this.size = 0;
        // 设置当前栈的最大容量
        this.maxSize = maxSize;
        // 初始化 主栈和辅助栈
        stack = new Stack<>();
        temp = new Stack<>();
    }

    public void push(int x) {
        // 目前所存储元素数量 < 所能够存储元素的最大数量
        if(size < maxSize){
            stack.push(x);
            // 当前所存储元素数量++
            size++;
        }
    }

    public int pop() {
        if(stack.isEmpty()){
            return -1;
        }
        // 当前所存储元素数量--;
        size--;
        return stack.pop();
    }

    public void increment(int k, int val) {
        // 主栈stack中所有元素，移动到辅助栈temp中;
        while(!stack.isEmpty()){
            temp.push(stack.pop());
        }
        // 统计所要进行累加操作的元素
        int move = Math.min(k , size);
        // 辅助栈stack中所有元素移动到主栈stack中，同时对于前move个元素进行increment操作;
        while(!temp.isEmpty()){
            Integer popValue = temp.pop();
            if(move > 0){
                popValue += val;
                // 所要进行累加操作的元素数量--;
                move--;
            }
            stack.push(popValue);
        }
    }
}
